# SQL Injection



ํ•ด์ปค์— ์˜ํ•ด ์กฐ์ž‘๋œ SQL ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋˜์–ด ๋น„์ •์ƒ์  ๋ช…๋ น์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•


# ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•

# 1) ์ธ์ฆ ์šฐํšŒ

๋ณดํ†ต ๋กœ๊ทธ์ธ์„ ํ•  ๋•Œ, ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ input ์ฐฝ์— ์ž…๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋ฒผ์šด ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. ์•„์ด๋””๊ฐ€ abc, ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งŒ์•ฝ 1234์ผ ๋•Œ ์ฟผ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ „์†ก๋  ๊ฒƒ์ด๋‹ค.

SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";

SQL Injection์œผ๋กœ ๊ณต๊ฒฉํ•  ๋•Œ, input ์ฐฝ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•จ๊ณผ ๋™์‹œ์— ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ์„ ํ•จ๊ป˜ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

1234; DELETE * USER FROM ID = "1";

๋ณด์•ˆ์ด ์™„๋ฒฝํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ด์ฒ˜๋Ÿผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์•„์ด๋””์™€ ์ผ์น˜ํ•ด์„œ True๊ฐ€ ๋˜๊ณ  ๋’ค์— ์ž‘์„ฑํ•œ DELETE ๋ฌธ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜๋„ ์žˆ๊ฒŒ ๋˜๋Š” ์น˜๋ช…์ ์ธ ์ƒํ™ฉ์ด๋‹ค.

์ด ๋ฐ–์—๋„ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ์˜ WHERE ์ ˆ์— OR๋ฌธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ '1' = '1'๊ณผ ๊ฐ™์€ true๋ฌธ์„ ์ž‘์„ฑํ•˜์—ฌ ๋ฌด์กฐ๊ฑด ์ ์šฉ๋˜๋„๋ก ์ˆ˜์ •ํ•œ ๋’ค DB๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ž‘ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


# 2) ๋ฐ์ดํ„ฐ ๋…ธ์ถœ

์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•ด ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ณดํ†ต ์—๋Ÿฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฉด์—์„œ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์กด์žฌ๋‹ค. ํ•ด์ปค๋“ค์€ ์ด๋ฅผ ์—ญ์ด์šฉํ•ด ์•…์˜์ ์ธ ๊ตฌ๋ฌธ์„ ์‚ฝ์ž…ํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ์œ ๋ฐœ์‹œํ‚จ๋‹ค.

์ฆ‰ ์˜ˆ๋ฅผ ๋“ค๋ฉด, ํ•ด์ปค๋Š” GET ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” URL ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ด์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์›น์•ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ณ  ํ•ดํ‚น์— ํ™œ์šฉํ•œ๋‹ค.



# ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

# 1) input ๊ฐ’์„ ๋ฐ›์„ ๋•Œ, ํŠน์ˆ˜๋ฌธ์ž ์—ฌ๋ถ€ ๊ฒ€์‚ฌํ•˜๊ธฐ

๋กœ๊ทธ์ธ ์ „, ๊ฒ€์ฆ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์„ค์ •ํ•œ ํŠน์ˆ˜๋ฌธ์ž๋“ค์ด ๋“ค์–ด์™”์„ ๋•Œ ์š”์ฒญ์„ ๋ง‰์•„๋‚ธ๋‹ค.

# 2) SQL ์„œ๋ฒ„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ, ํ•ด๋‹นํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๊ฐ์ถ”๊ธฐ

view๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—๋Š” ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋†’์ธ๋‹ค. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” view๋กœ๋งŒ ์ ‘๊ทผํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“ ๋‹ค.

# 3) preparestatement ์‚ฌ์šฉํ•˜๊ธฐ

preparestatement๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ž๋™์œผ๋กœ escaping ํ•ด์ค€๋‹ค. (statement์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฟผ๋ฆฌ๋ฌธ์—์„œ ์ „๋‹ฌ์ธ์ž ๊ฐ’์„ ?๋กœ ๋ฐ›๋Š” ๊ฒƒ) ์ด๋ฅผ ํ™œ์šฉํ•ด ์„œ๋ฒ„ ์ธก์—์„œ ํ•„ํ„ฐ๋ง ๊ณผ์ •์„ ํ†ตํ•ด์„œ ๊ณต๊ฒฉ์„ ๋ฐฉ์–ดํ•œ๋‹ค.

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM